﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace AlgorithmTest
{
    // T_[四个数字排序]_[算法名]
    public class T_0150_GetMinimumDifference : IAlgorithm
    {
        // 530. 二叉搜索树的最小绝对差

        // 给你一个二叉搜索树的根节点 root ，返回 树中任意两不同节点值之间的最小差值 。
        // 差值是一个正数，其数值等于两值之差的绝对值。

        // 提示：
        //  树中节点的数目范围是[2, 10^4]
        //  0 <= Node.val <= 10^5

        public void Test()
        {
            // 算法参数定义
            var root = new TreeNode(6,
                    new TreeNode(3,
                        new TreeNode(1),
                        new TreeNode(4)
                    ),
                    new TreeNode(8)
                );
            // 算法执行与打印
            Console.WriteLine(GetMinimumDifference(root));
        }

        // 算法
        int res = int.MaxValue;
        int lastVal = -1;
        public int GetMinimumDifference(TreeNode root)
        {
            // 前序遍历
            if (root.left != null)
                GetMinimumDifference(root.left);

            if (!(lastVal < 0 && res == int.MaxValue))
                res = Math.Min(root.val - lastVal, res);
            lastVal = root.val;

            if (root.right != null)
                GetMinimumDifference(root.right);

            return res;
        }
    }
}
